package b_中等;

/**
 * 给定一个非负整数，你至多可以交换一次数字中的任意两位。返回你能得到的最大值。
 * <p>
 * 示例 1 :
 * <p>
 * 输入: 2736
 * 输出: 7236
 * 解释: 交换数字2和数字7。
 * 示例 2 :
 * <p>
 * 输入: 9973
 * 输出: 9973
 * 解释: 不需要交换。
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/maximum-swap
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 *
 * @author caihe
 * @date 2022/9/13 9:21
 */
public class _670最大交换 {

    public int maximumSwap(int num) {
        char[] chars = Integer.toString(num).toCharArray();

        boolean flag = true;
        for (int i = 0; i < chars.length && flag; i++) {
            int maxIndex = i;
            int maxVal = chars[i];
            // 从后往前比较
            for (int j = chars.length - 1; j >= i; j--) {
                if (chars[j] > maxVal) {
                    maxIndex = j;
                    maxVal = chars[j];
                    flag = false;
                }
            }
            if (!flag) {
                char tmp = chars[i];
                chars[i] = chars[maxIndex];
                chars[maxIndex] = tmp;
            }
        }
        return Integer.parseInt(new String(chars));
    }

    public static void main(String[] args) {
        _670最大交换 a = new _670最大交换();
        a.maximumSwap(98368);
    }

}
